feat: TIL 작성 시 파일 업로드 시 S3에 저장되는 기능 구현 및 버그 수정#182
Conversation
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
PR Code Suggestions ✨Explore these optional code suggestions:
|
Code Review🔴 CriticalAPI 하위 호환성 파괴
🟠 Major1. DB 마이그레이션 스크립트 누락
2. 임시저장 업데이트 시 기존 S3 객체 미삭제 기존 draft에 3. 파일 크기 검증 누락
🔵 Minor1.
2. 테스트
✅ 긍정적 평가
|
코드리뷰 — 커밋 17bf895 TIL 수정 시 썸네일 S3 업로드전체적으로 🔴 기존 S3 객체 미삭제
// 개선 예시
String oldUrl = til.getThumbnailUrl();
String newUrl = uploadThumbnailIfPresent(thumbnailImage, userId, til.getPot().getId());
if (oldUrl != null) s3Service.deleteFile(oldUrl);
til.updateThumbnailUrl(newUrl);현재 🟡 이중 null 체크
|
|
[문제] [원인]
[수정한 파일]
|
|
🔴 Critical — 반드시 수정
권장 수정: 기존 프로젝트가 src/main/resources/db/*.sql에 수동 마이그레이션 SQL을 두는 흐름이 있으니, 같은 방식으로 추가하는 게 좋아 보입니다.
S3 업로드는 성공했는데 이후 tilRepository.save, syncTags, applyWatering 중 하나가 실패하면 DB 트랜잭션은 롤백되지만 S3 파일은 그대로 남습니다.
영향:
권장 수정:
🟠 High — 가급적 수정 이미지 검증이 Content-Type 헤더만 신뢰함 클라이언트가 임의로 image/jpeg를 붙이면 실제 파일 내용이 이미지가 아니어도 S3에 올라갈 수 있습니다.
마이그레이션 SQL도 같은 길이로 맞추는 게 좋습니다.
버킷이 public-read 정책이 아니면 FE는 URL을 받아도 이미지를 볼 수 없습니다. 기존 presigned upload 흐름도 imageUrl을 반환하고 있어서 같은 전제가 있었을 수 있지만, 이번 PR에서 직접 업로드 썸네일까지 들어오면서 더 중요해졌습니다.
두 방식이 공존하는 건 가능하지만, 정책이 달라질 수 있습니다.
방식 차이가 의도된 것인지 PR 설명에 명확히 적는 게 좋습니다. 가능하면 썸네일도 presigned 방식으로 통일하는 편이 서버 부하와 트랜잭션 정합성 면에서 더 단순합니다. 🟡 Medium — 확인 필요
10MB 이미지는 썸네일로는 꽤 큽니다. 본문 이미지 정책과 썸네일 정책이 다를 수 있으니 썸네일은 별도 제한을 두는 것도 고려할 만합니다.
권장:
|
|
User description
🔎 What
[ 문제상황 ]
TIL에 이미지와 함께 발행해도 S3에 저장되지 않으며 "수정하기" 버튼 클릭 시 해당 TIL의 이미지가 삭제됨
🔗 Issue
✅ 체크리스트
PR Type
Enhancement, Bug fix
Description
TIL 작성 및 임시저장 시 S3 이미지 업로드 기능 구현
TIL 엔티티 및 응답 DTO에 썸네일 URL 필드 추가
Micrometer JVM 메트릭스 수집 설정 추가
기존 테스트 코드 수정 및 S3 업로드 관련 테스트 추가
Diagram Walkthrough
File Walkthrough
6 files
TIL 작성/임시저장 API에 이미지 파일 업로드 지원TIL 응답 DTO에 썸네일 이미지 URL 필드 추가TIL 엔티티에 썸네일 URL 컬럼 및 관련 팩토리 메서드 추가TIL 작성/임시저장 시 썸네일 이미지 S3 업로드 로직 구현내부 서버 오류를 위한 CustomException 팩토리 메서드 추가MultipartFile을 S3에 직접 업로드하는 메서드 구현2 files
Micrometer JVM 프로세스 메트릭스 수집 설정 추가S3 직접 파일 업로드를 위한 S3Client 빈 설정3 files
TIL 생성 및 임시저장 테스트 메서드 시그니처 변경에 따른 수정TIL 이미지 업로드 시나리오 및 예외 처리 테스트 추가S3Service의 파일 직접 업로드 기능 테스트 추가